home *** CD-ROM | disk | FTP | other *** search
/ Grand Slam 3 / Grand Slam 3.iso / 023 / soundss3.arj / CPLAY.C < prev    next >
C/C++ Source or Header  |  1995-03-11  |  6KB  |  192 lines

  1. //
  2. //===========================================================================
  3. //
  4. // SoundSystem3 small player example
  5. //
  6. // Written for Borland C 3.1 & Tasm 3.1
  7. //
  8. // (pd)1995 by the Frontman of Crew242
  9. //
  10. //
  11. // .model MEDIUM
  12. //
  13. //===========================================================================
  14. //
  15. #include <stdio.h>
  16. #include <conio.h>
  17. typedef struct pblock
  18. {    int baseport;
  19.     char dma_number;
  20.     char irq_number;
  21.     unsigned int samplerate;
  22.     char intern_type;
  23.     char irq_type;
  24.     char start_pos;
  25.     char loop_pos;
  26.     char song_mod;
  27.     unsigned char master_vol;
  28.     unsigned char music_vol;
  29.     unsigned char fx_vol;
  30. };
  31. //
  32. //
  33. // Function library
  34. //
  35. extern int far autodetect(struct pblock *paramblock);
  36. //
  37. // Return: player = 0 nothing found
  38. //            1 SB/SBPro   (selection within SS3.CFG or param-block)
  39. //                  2 SB16/AWE32 (no difference in this version)
  40. //                  3 PAS+/16
  41. //                  4 GUS/GUS MAX
  42. //
  43. //         paramblock filled
  44. //
  45. extern int far config_init(int player, int code, struct pblock *paramblock);
  46. //
  47. // Input: player = 1 SB/SBPro   (selection within SS3.CFG or param-block)
  48. //                 2 SB16/AWE32 (no difference in this version)
  49. //                 3 PAS+/16
  50. //                 4 GUS/GUS MAX
  51. //
  52. //        code  <> 0xc242
  53. //
  54. //        paramblock = any pointer to a pblock
  55. //
  56. // Return: carry-flag = 0 function completed properly
  57. //                      1 function aborted after error
  58. //
  59. //
  60. // If you prefer a parameter block instead of SS3.CFG,
  61. //
  62. // set code = 0xc242 and paramblock pointing to a struct like:
  63. /*
  64. ; pblock:+ 0 int         BASE PORT      210H-280H, 388H, ETC.
  65. ;        + 2 char        DMA NUMBER      0-7
  66. ;        + 3 char        IRQ NUMBER      0-15
  67. ;     + 4 unsigned int    SAMPLE RATE      10000-44100
  68. ;        + 6 char        INTERNAL TYPE     0,1,2,3,... (if necessary)
  69. ;     + 7 char        INTERRUPT TYPE    0,1 (realtime clock, timer)
  70. ;        + 8 char        STARTING POSITION     0-127
  71. ;        + 9 char         LOOP POSITION        0-127,128
  72. ;        +10 char        SONG MODUS        0-3
  73. ;        +11 unsigned char    START MASTER VOLUME     0-255
  74. ;     +12 unsigned char    START MUSIC VOLUME    0-255
  75. ;        +13 unsigned char    START FX VOLUME         0-255
  76. */
  77. //
  78. extern int far load_mod(int player, char *filename);
  79. //
  80. // Input: filename = pointer to path/filename,0 as required for dos
  81. //
  82. // (only new inputs and returns, repeated params same like above)
  83. //
  84. extern int far play_music(int player);
  85. extern int far stop_music(int player);
  86. extern int far end_music(int player);
  87. extern int far load_sample(int player, char *filename, int amiga_pc, int *handle);
  88. //
  89. // Input: amiga_pc = 0x00 sample is in unsigned format (PC, 0 to 255)
  90. //                   0x80 sample is in signed format (Amiga, -128 to 127)
  91. //
  92. // Return: handle = handle of the sample for use with play_sample
  93. //                  similar to the DOS handle for files
  94. //
  95. extern int far play_sample(int player, int handle, int freq_in_hz, int panning);
  96. //
  97. // Input: freq_in_hz = play rate of the sample in Hertz (1/s)
  98. //
  99. //        panning = balance from left (0) to right (255)
  100. //
  101. extern int far end_sample(int player);
  102. extern int far set_samplerate(int player, int freq_in_hz);
  103. //
  104. // Input: freq_in_hz = 10000-22222 for SB/SBPro
  105. //                     10000-44100 for SB16/AWE32
  106. //                     10000-44100 for PAS+/16
  107. //                     no effect   on  GUS
  108. //
  109. extern int far get_volume(int player, int *master_vol, int *music_vol, int *fx_vol);
  110. //
  111. // Return: master_vol = master volume from low (0) to high (255)
  112. //
  113. //         music_vol = music volume from low (0) to high (255)
  114. //
  115. //         fx_vol = fx volume from low (0) to high (255)
  116. //
  117. extern int far set_volume(int player, int master_vol, int music_vol, int fx_vol);
  118. //
  119. // Input: same as above but as input
  120. //
  121. extern int far set_songloop(int player, int loop_position);
  122. //
  123. // Input: loop_position = 0-127 pattern position for song restart
  124. //                        128   no restart
  125. //
  126. extern int far get_songposition(int player, int *song_position);
  127. //
  128. // Return: song_position = 0-127 actual song position
  129. //
  130. extern int far set_songposition(int player, int song_position);
  131. //
  132. // Input: song_position = 0-127 immediate position change and pattern restart
  133. //                        takes only effect after song start because
  134. //                        play_music starts always at position 0
  135. //
  136. extern int far get_songmod(int player, int *song_modus);
  137. //
  138. // Return: song_modus = 0 music and fx
  139. //                      1 music only
  140. //                      2 fx only
  141. //                      3 no sound
  142. //
  143. extern int far set_songmod(int player, int song_modus);
  144. //
  145. // Input: same as above but as input
  146. //
  147. //===========================================================================
  148. //
  149. // Very small sample of use
  150. //
  151. main(int argc, char *argv[])
  152. {    int a,b= 1,code= 0, player= 0;
  153.     struct pblock pb;
  154.     printf("\nSoundSystemSource3 (pd)1995 by the Frontman of Crew242\n\n");
  155.     printf("Usage: CPLAY <# of player> <filename.mod>\n");
  156.     printf("              0 Autodetect\n");
  157.     printf("              1 SB/SBPro\n");
  158.     printf("              2 SB16\n");
  159.     printf("              3 PAS+/16\n");
  160.     printf("              4 GUS\n\n");
  161.     printf("Look out for the game 'Future Dimension'!\n");
  162.     printf("The greatest shoot'em up ever on PC.\n");
  163.     printf("Of course another high quality product of Crew242.\n\n");
  164.     if ((argc==2) || (argc>=3 && argv[1][0]>='0' && argv[1][0]<='4'))
  165.     {    if (argc>=3)
  166.         {    player= (unsigned)(int)(argv[1][0]) & 15;
  167.             b= 2;
  168.         }
  169.         if (player==0)
  170.         {    player= autodetect(&pb);
  171.             code= 0xc242;
  172.         }
  173.         if (player>0)
  174.         {    a= config_init(player,code,&pb);
  175.             a= load_mod(player, argv[b]);
  176.             if (a==0)
  177.             {    a= play_music(player);
  178.                 if (a==0)
  179.                 {    printf("Hit a key to stop\n");
  180.                     while(!kbhit());
  181.                     a= stop_music(player);
  182.                     a= end_music(player);
  183.                 }
  184.             }
  185.         }
  186.     }
  187.     else a=0;
  188.     return a;
  189. }
  190. //
  191. //===========================================================================
  192. //